Star Schema完全参考手册读书笔记七
维度模型描述了人们对所处世界的度量。正如前面章节所强调的那样,每个星型模式都包含一个事实表,作为描述特定过程的度量。度量又称事实,通过相关的维度获得存在的环境。事实表的粒度描述了所记录的事实的细节层次。
为便于独立地分析研究,应为每个过程建立一个事实表,但并不是每个事实表都只对应一个过程。过程模型用于描述业务活动,指导对功能组件的设计。过程建模涉及功能分解,即一个过程可以被分解成多个子过程。当两个事实对事件的描述不在同一个时间点上,或者描述的粒度不同时,它们描述的就是不同的过程。如果希望对不同的过程进行分析,就需要多个事实表。
代理键通常都没有实际意义。当采用单一事实表表示多个过程时,在报表中出现包含0值的事实是常见的现象。单一事实表方案可以是记录一个常用的事实,通过建立一个新的维度来判定它是表示一个订单还是表示一次发货。使用该技术可以解决出现0值行的问题,因为每行要么是订单,要么是发货。采用具有共享维度的不同事实表表示两个过程,可以使每个事实表仅存储适当的事实,不需要记录无用的0行。
当描述事件的两个或多个事实具有不同的粒度时,它们描述的是不同的过程。将它们放入同一个事实表中不利于对单一过程的分析工作。当存在多个业务过程且需要对每个过程单独分析时,为每个过程建立一个事实表非常重要。否则,对独立过程的分析将存在严重的问题。
可以认为维度表和事实表具有父子关系,其中维度表可视为父子关系中的父节点。如果某个维度与多个事实表关联,事实表中的行可视为具有兄弟关系。它们具有相同的父节点。当某条SQL语句试图对兄弟行执行连接操作时,要么直接执行操作,要么通过它们共同的父节点执行操作,关系数据库管理系统会把一张表的子节点与其他表中相应的兄弟节点进行匹配。获得的结果是笛卡尔乘积。当直接对两个事实表或者通过两个事实表的公共维度执行连接操作时,就会得到这样的结果。
不要试图对事实表进行连接操作,无论是直接操作还是通过维度表操作。对事实表的连接操作将会产生不正确的结果。